package com.xie.leetcode.string;

//10. 正则表达式匹配
//        给你一个字符串 s 和一个字符规律 p，请你来实现一个支持 '.' 和 '*' 的正则表达式匹配。
//
//        '.' 匹配任意单个字符
//        '*' 匹配零个或多个前面的那一个元素
//        所谓匹配，是要涵盖 整个 字符串 s的，而不是部分字符串。
//
//
//        示例 1：
//
//        输入：s = "aa" p = "a"
//        输出：false
//        解释："a" 无法匹配 "aa" 整个字符串。
//        示例 2:
//
//        输入：s = "aa" p = "a*"
//        输出：true
//        解释：因为 '*' 代表可以匹配零个或多个前面的那一个元素, 在这里前面的元素就是 'a'。因此，字符串 "aa" 可被视为 'a' 重复了一次。
//        示例 3：
//
//        输入：s = "ab" p = ".*"
//        输出：true
//        解释：".*" 表示可匹配零个或多个（'*'）任意字符（'.'）。
//        示例 4：
//
//        输入：s = "aab" p = "c*a*b"
//        输出：true
//        解释：因为 '*' 表示零个或多个，这里 'c' 为 0 个, 'a' 被重复一次。因此可以匹配字符串 "aab"。
//        示例 5：
//
//        输入：s = "mississippi" p = "mis*is*p*."
//        输出：false
//
//
//        提示：
//
//        1 <= s.length <= 20
//        1 <= p.length <= 30
//        s 可能为空，且只包含从 a-z 的小写字母。
//        p 可能为空，且只包含从 a-z 的小写字母，以及字符 . 和 *。
//        保证每次出现字符 * 时，前面都匹配到有效的字符

/**
 * @author xiezhendong
 * @date 2021/10/29
 */
public class IsMatch {

    public static void main(String[] args) {
        IsMatch isMatch = new IsMatch();
        System.out.println(isMatch.isMatch("ab", ".*c") + " :   " + false);
        System.out.println(isMatch.isMatch("aa", "a") + " :   " + false);
        System.out.println(isMatch.isMatch("aa", "a.") + " :   " + true);
        System.out.println(isMatch.isMatch("aba", "a.b") + " :   " + false);
        System.out.println(isMatch.isMatch("aa", "a*") + " :   " + true);
        System.out.println(isMatch.isMatch("aab", "c*a*b") + " :   " + true);
        System.out.println(isMatch.isMatch("ab", ".*") + " :   " + true);
        System.out.println(isMatch.isMatch("mississippi", "mis*is*p*.") + " :   " + false);
        System.out.println(isMatch.isMatch("mississippi", "mis*is*ip*.") + " :   " + true);
    }

    public boolean isMatch(String s, String p) {
        if (!p.contains("*") && !p.contains(".")) {
            return s.equals(p);
        } else if (!p.contains("*") && p.contains(".")) {
            if (s.length() != p.length()) {
                return false;
            }

            char[] pChars = p.toCharArray();
            char[] sChars = s.toCharArray();

            for (int i = 0; i < pChars.length; i++) {
                String pOne = String.valueOf(pChars[i]);
                String sOne = String.valueOf(sChars[i]);
                if (!".".equals(pOne) && !pOne.equals(sOne)) {
                    return false;
                }
            }
        } else {

        }

        return true;
    }
}
